package com.jxauaia.contest.service;

import com.jxauaia.contest.model.dto.ChangePasswordDTO;
import com.jxauaia.contest.model.dto.LoginDTO;
import com.jxauaia.contest.model.dto.RegisterDTO;
import com.jxauaia.contest.model.dto.UserProfileDTO;
import com.jxauaia.contest.model.entity.User;
import com.jxauaia.contest.model.vo.CaptchaVO;

import java.util.List;

public interface UserService {
    /**
     * 用户注册
     */
    User register(RegisterDTO registerDTO);
    
    /**
     * 用户登录
     */
    User login(LoginDTO loginDTO);
    
    /**
     * 根据用户名查找用户
     */
    User findByUsername(String username);
    
    /**
     * 根据邮箱查找用户
     */
    User findByEmail(String email);
    
    /**
     * 根据ID查找用户
     */
    User findById(Integer id);
    
    /**
     * 更新用户资料
     */
    User updateUserProfile(Integer userId, UserProfileDTO userProfileDTO);
    
    /**
     * 修改密码
     */
    boolean changePassword(Integer userId, ChangePasswordDTO changePasswordDTO);
    
    /**
     * 注销账号
     */
    boolean deactivateAccount(Integer userId, Integer operatorId);
    
    /**
     * 获取所有用户
     */
    List<User> findAll();
    
    /**
     * 更新用户状态
     */
    boolean updateStatus(Integer userId, Integer status);
    
    /**
     * 删除用户
     */
    boolean deleteUser(Integer userId);
    
    /**
     * 保存用户
     */
    boolean save(User user);
    
    /**
     * 生成验证码
     */
    CaptchaVO generateCaptcha();
    
    /**
     * 验证验证码
     */
    boolean validateCaptcha(String captchaId, String captchaCode);
    
    /**
     * 检查用户名是否存在
     */
    boolean existsByUsername(String username);
    
    /**
     * 检查邮箱是否存在
     */
    boolean existsByEmail(String email);
    
    /**
     * 根据ID获取用户
     */
    User getUserById(Long id);
    
    /**
     * 根据用户名获取用户
     */
    User getUserByUsername(String username);
    
    /**
     * 创建用户
     */
    boolean createUser(User user);
    
    /**
     * 更新用户信息
     */
    boolean updateUser(User user);
    
    /**
     * 删除用户
     */
    boolean deleteUser(Long id);
    
    /**
     * 获取用户个人主页信息
     */
    User getUserPersonalPage(Integer userId);
    
    /**
     * 更新用户个人主页信息
     */
    User updateUserPersonalPage(Integer userId, UserProfileDTO userProfileDTO);
    
    /**
     * 注销账号（彻底删除）
     */
    boolean cancelAccount(Integer userId, String password);
    
    /**
     * 管理员重置用户密码
     * @param userId 用户ID
     * @param newPassword 新密码
     * @return 是否成功
     */
    boolean resetPassword(Integer userId, String newPassword);
    
    /**
     * 按条件搜索用户
     * @param username 用户名
     * @param email 邮箱
     * @param realName 真实姓名
     * @param status 状态
     * @return 用户列表
     */
    List<User> searchUsers(String username, String email, String realName, Integer status);
}
